<!DOCTYPE html>
<html lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>wiener_filter [HALCON算子参考手册]</title>
<style type="text/css">
      body {
    color: #000000;
    background-color: #ffffff;
    margin: 0;
    font-family: Arial, Helvetica, sans-serif;
}

.body_main {
    margin-left: 35px;
    margin-right: 35px;
}

@media screen and (min-width:992px) {

    .body_main {
        margin-left: 10%;
        margin-right: 10%;
    }

    table.toctable {
        width: 80%
    }
}

@media screen and (min-width:1400px) {

    .body_main {
        margin-left: 15%;
        margin-right: 15%;
    }

    table.toctable {
        width: 70%
    }
}

body>div ul ul {
    margin-left: inherit;
}

a:link {
    color: #0044cc;
}

a:link,
a:visited {
    text-decoration: none;
}

a:link:hover,
a:visited:hover {
    text-decoration: underline;
}

th {
    text-align: left;
}

h1,
h2,
h3,
h4,
h5,
h6 {
    text-rendering: optimizeLegibility;
    color: #666666;
}

code {
    font-family: monospace,monospace;
}

h1 a.halconoperator {
    font-family: Arial, Helvetica, sans-serif;
    color: #666666;
}

h2 a.halconoperator {
    font-family: Arial, Helvetica, sans-serif;
    color: #666666;
}

hr {
    border: 0;
    border-top: solid 1px #f28d26;
}

.pre {
    display: block;
    padding-bottom: 1ex;
    font-family: monospace;
    white-space: pre;
}

pre {
    font-family: monospace, monospace;
    padding: 1ex;
    white-space: pre-wrap;
}

.toc {
    font-size: 80%;
    border-top: 1px dashed #f28d26;
    border-bottom: 1px dashed #f28d26;
    padding-top: 5px;
    padding-bottom: 5px;
}

.inv {
    margin: 0;
    border: 0;
    padding: 0;
}

.banner {
    color: #666666;
    padding-left: 1em;
}

.logo {
    background-color: white;
}

.keyboard {
    font-size: 80%;
    padding-left: 3px;
    padding-right: 3px;
    border-radius: 5px;
    border-width: 1px;
    border-style: solid;
    border-color: #f28d26;
    background-color: #f3f3f3;
}

.warning {
    margin-top: 2ex;
    margin-bottom: 1ex;
    padding: 10px;
    text-align: center;
    border: 1px solid;
    color: #bb0000;
    background-color: #fff7f7
}

.imprint {
    margin-top: 1ex;
    font-size: 80%;
    color: #666666;
}

.imprinthead {
    font-weight: bolder;
    color: #666666;
}

.indexlink {
    text-align: right;
    padding-bottom: 5px;
}

.postscript {
    margin-top: 2ex;
    font-size: 80%;
    color: #666666
}

.evenrow {
    background-color: #e7e7ef;
    vertical-align: top;
}

.oddrow {
    background-color: #f7f7ff;
    vertical-align: top;
}

.headrow {
    background-color: #97979f;
    color: #ffffff;
    vertical-align: top;
}

.logorow {
    vertical-align: top;
}

.error {
    color: red;
}

.var {
    font-style: italic
}

.halconoperator {
    font-family: monospace, monospace;
}

span.operator {
    font-family: monospace, monospace;
}

span.procedure {
    font-family: monospace, monospace;
}

span.operation {
    font-family: monospace, monospace;
}

span.feature {
    font-family: Arial, Helvetica, Homerton, sans-serif;
}

ul {
    padding-left: 1.2em;
}

li.dot {
    list-style-type: square;
    color: #f28d26;
}

.breadcrumb {
    font-size: 80%;
    color: white;
    background-color: #062d64;
    margin-bottom: 20px;
    padding-left: 35px;
    padding-right: 35px;
    padding-bottom: 15px;
}

.webbar {
    font-size: 80%;
    background-color: #dddddd;
    margin-top: 0px;
    margin-left: -35px;
    margin-right: -35px;
    margin-bottom: 0px;
    padding-top: 5px;
    padding-left: 35px;
    padding-right: 35px;
    padding-bottom: 5px;
}

.footer {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    border-top: 1px dashed #f28d26;
    font-size: 80%;
    color: #666666;
    padding-bottom: 8px;
}

.footer .socialmedia a {
    padding-left: 7px;
}

.socialmedia {
    padding-top: 10px;
}

.copyright {
    margin-top: 19px;
}

.breadcrumb a {
    color: #ffffff;
    border-bottom: 1px solid white;
}

.breadcrumb a:link:hover,
.breadcrumb a:visited:hover {
    text-decoration: none;
    border-bottom: none;
}

.heading {
    margin-top: 1ex;
    font-size: 110%;
    font-weight: bold;
    color: #666666;
}

.text {
    color: black;
}

.example {
    font-size: 80%;
    background-color: #f3f3f3;
    border: 1px dashed #666666;
    padding: 10px;
}

.displaymath {
    display: block;
    text-align: center;
    margin-top: 1ex;
    margin-bottom: 1ex;
}

.title {
    float: left;
    padding-top: 3px;
    padding-bottom: 3px;
}

.signnote {
    font-family: Arial, Helvetica, Homerton, sans-serif;
    font-size: 80%;
    color: #666666;
    font-weight: lighter;
    font-style: italic
}

.par {
    margin-bottom: 1.5em;
}

.parhead {
    text-align: right;
}

.parname {
    float: left;
}

.pardesc {
    font-size: 85%;
    margin-top: 0.5em;
    margin-bottom: 0.5em;
    margin-left: 2em;
}

.parcat {
    color: #666;
    font-weight: bold;
}

*[data-if=cpp],
*[data-if=c],
*[data-if=dotnet],
*[data-if=com],
*[data-if=python] {
    display: none;
}

.tabbar {
    text-align: right;
    border-bottom: 1px solid #f28d26;
    margin-bottom: 0.5em;
}

ul.tabs {
    padding-top: 3px;
    padding-bottom: 3px;
    margin-top: 10px;
    margin-bottom: 0;
    font-size: 80%
}

ul.tabs li {
    padding-top: 3px;
    padding-bottom: 3px;
    display: inline;
    overflow: hidden;
    list-style-type: none;
    margin: 0;
    margin-left: 8px;
    border-top: 1px solid #666;
    border-left: 1px solid #666;
    border-right: 1px solid #666;
}

ul.tabs li.active {
    border-left: 1px solid #f28d26;
    border-right: 1px solid #f28d26;
    border-top: 1px solid #f28d26;
    border-bottom: 1px solid #fff;
}

ul.tabs li.inactive {
    background-color: #eee;
}

ul.tabs li a {
    padding-left: 5px;
    padding-right: 5px;
    color: #666;
}

ul.tabs li a:link:hover {
    text-decoration: none;
}

ul.tabs li.inactive a {
    color: #666;
}

ul.tabs li.active a {
    color: black;
}

dl.generic dd {
    margin-bottom: 1em;
}

.pari {
    color: olive;
}

.paro {
    color: maroon;
}

.comment {
    font-size: 80%;
    color: green;
    white-space: nowrap;
}

table.grid {
    border-collapse: collapse;
}

table.grid td {
    padding: 5px;
    border: 1px solid;
}

table.layout {
    border: 0px;
}

table.layout td {
    padding: 5px;
}

table.table {
    border-collapse: collapse;
}

table.table td {
    padding: 5px;
    border-left: 0px;
    border-right: 0px;
}

table.table tr:last-child {
    border-bottom: 1px solid;
}

table.table th {
    padding: 5px;
    border-top: 1px solid;
    border-bottom: 1px solid;
    border-left: 0px;
    border-right: 0px;
}

.details_summary {
    cursor: pointer;
}

table.toctable {
    width: 100%;
}

table.toctable col:first-child {
    width: 20%;
}

table.toctable col:nth-last-child(2) {
    width: 8%;
}

table.altcolored tr:nth-child(even) {
    background-color: #f3f3f3;
}

    </style>
<!--OP_REF_STYLE_END-->
<script>
    <!--
var active_lang='hdevelop';function switchVisibility(obj,active_lang,new_lang)
{var display_style='inline';
for(var i=0;i<obj.length;i++)
{if(obj.item(i).getAttribute('data-if')==new_lang)
{obj.item(i).style.display=display_style;}
if(obj.item(i).getAttribute('data-if')==active_lang)
{obj.item(i).style.display='none';}}
return;}
function toggleLanguage(new_lang,initial)
{if(active_lang!=new_lang)
{var lis=document.getElementsByTagName('li');for(var i=0;i<lis.length;i++)
{if(lis.item(i).id=='syn-'+new_lang)
{lis.item(i).className='active';}
else
{lis.item(i).className='inactive';}}
var divs=document.getElementsByTagName('div');var spans=document.getElementsByTagName('span');switchVisibility(divs,active_lang,new_lang);switchVisibility(spans,active_lang,new_lang);if(!initial)
{setCookie("halcon_reference_language",new_lang,null,null);}
active_lang=new_lang;}
return;}
function setCookie(name,value,domain,exp_offset,path,secure)
{localStorage.setItem(name,value);}
function getCookie(name)
{return localStorage.getItem(name);}
function initialize()
{var qs=location.href.split('?')[1];var qs_lang_raw=location.href.split('interface=')[1];var qs_lang;if(qs_lang_raw)
{qs_lang=qs_lang_raw.split('#')[0];}
var cookie_lang=getCookie("halcon_reference_language");var new_lang;if((qs_lang=="hdevelop")||(qs_lang=="dotnet")||(qs_lang=="python")||(qs_lang=="cpp")||(qs_lang=="c"))
{new_lang=qs_lang;setCookie("halcon_reference_language",new_lang,null,null);}
else if((cookie_lang=="hdevelop")||(cookie_lang=="dotnet")||(cookie_lang=="python")||(cookie_lang=="cpp")||(cookie_lang=="c"))
{new_lang=cookie_lang;}
else
{new_lang="hdevelop";}
toggleLanguage(new_lang,1);return;}
-->

  </script>
</head>
<body onload="initialize();">
<div class="breadcrumb">
<br class="inv"><a href="index.html">目录</a> / <a href="toc_filters.html">过滤器</a> / <a href="toc_filters_wienerfilter.html">Wiener Filter</a><br class="inv">
</div>
<div class="body_main">
<div class="tabbar"><ul class="tabs">
<li id="syn-hdevelop" class="active"><a href="javascript:void(0);" onclick="toggleLanguage('hdevelop')" onfocus="blur()">HDevelop</a></li>
<li id="syn-dotnet" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('dotnet')" onfocus="blur()">.NET</a></li>
<li id="syn-python" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('python')" onfocus="blur()">Python</a></li>
<li id="syn-cpp" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('cpp')" onfocus="blur()">C++</a></li>
<li id="syn-c" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('c')" onfocus="blur()">C</a></li>
</ul></div>
<div class="indexlink">
<a href="index_classes.html"><span data-if="dotnet" style="display:none;">类别</span><span data-if="cpp" style="display:none;">类别</span></a><span data-if="dotnet" style="display:none;"> | </span><span data-if="cpp" style="display:none;"> | </span><a href="index_by_name.html">算子列表</a>
</div>
<!--OP_REF_HEADER_END-->
<h1 id="sec_name">
<span data-if="hdevelop" style="display:inline;">wiener_filter</span><span data-if="c" style="display:none;">wiener_filter</span><span data-if="cpp" style="display:none;">WienerFilter</span><span data-if="dotnet" style="display:none;">WienerFilter</span><span data-if="python" style="display:none;">wiener_filter</span> (算子名称)</h1>
<h2>名称</h2>
<p><code><span data-if="hdevelop" style="display:inline;">wiener_filter</span><span data-if="c" style="display:none;">wiener_filter</span><span data-if="cpp" style="display:none;">WienerFilter</span><span data-if="dotnet" style="display:none;">WienerFilter</span><span data-if="python" style="display:none;">wiener_filter</span></code> — Image restoration by Wiener filtering.</p>
<h2 id="sec_synopsis">参数签名</h2>
<div data-if="hdevelop" style="display:inline;">
<p>
<code><b>wiener_filter</b>(<a href="#Image"><i>Image</i></a>, <a href="#Psf"><i>Psf</i></a>, <a href="#FilteredImage"><i>FilteredImage</i></a> : <a href="#RestoredImage"><i>RestoredImage</i></a> :  : )</code></p>
</div>
<div data-if="c" style="display:none;">
<p>
<code>Herror <b>wiener_filter</b>(const Hobject <a href="#Image"><i>Image</i></a>, const Hobject <a href="#Psf"><i>Psf</i></a>, const Hobject <a href="#FilteredImage"><i>FilteredImage</i></a>, Hobject* <a href="#RestoredImage"><i>RestoredImage</i></a>)</code></p>
<p>
<code>Herror <b>T_wiener_filter</b>(const Hobject <a href="#Image"><i>Image</i></a>, const Hobject <a href="#Psf"><i>Psf</i></a>, const Hobject <a href="#FilteredImage"><i>FilteredImage</i></a>, Hobject* <a href="#RestoredImage"><i>RestoredImage</i></a>)</code></p>
</div>
<div data-if="cpp" style="display:none;">
<p>
<code>void <b>WienerFilter</b>(const HObject&amp; <a href="#Image"><i>Image</i></a>, const HObject&amp; <a href="#Psf"><i>Psf</i></a>, const HObject&amp; <a href="#FilteredImage"><i>FilteredImage</i></a>, HObject* <a href="#RestoredImage"><i>RestoredImage</i></a>)</code></p>
<p>
<code><a href="HImage.html">HImage</a> <a href="HImage.html">HImage</a>::<b>WienerFilter</b>(const HImage&amp; <a href="#Psf"><i>Psf</i></a>, const HImage&amp; <a href="#FilteredImage"><i>FilteredImage</i></a>) const</code></p>
</div>
<div data-if="com" style="display:none;"></div>
<div data-if="dotnet" style="display:none;">
<p>
<code>static void <a href="HOperatorSet.html">HOperatorSet</a>.<b>WienerFilter</b>(<a href="HObject.html">HObject</a> <a href="#Image"><i>image</i></a>, <a href="HObject.html">HObject</a> <a href="#Psf"><i>psf</i></a>, <a href="HObject.html">HObject</a> <a href="#FilteredImage"><i>filteredImage</i></a>, out <a href="HObject.html">HObject</a> <a href="#RestoredImage"><i>restoredImage</i></a>)</code></p>
<p>
<code><a href="HImage.html">HImage</a> <a href="HImage.html">HImage</a>.<b>WienerFilter</b>(<a href="HImage.html">HImage</a> <a href="#Psf"><i>psf</i></a>, <a href="HImage.html">HImage</a> <a href="#FilteredImage"><i>filteredImage</i></a>)</code></p>
</div>
<div data-if="python" style="display:none;">
<p>
<code>def <b>wiener_filter</b>(<a href="#Image"><i>image</i></a>: HObject, <a href="#Psf"><i>psf</i></a>: HObject, <a href="#FilteredImage"><i>filtered_image</i></a>: HObject) -&gt; HObject</code></p>
</div>
<h2 id="sec_description">描述</h2>
<p><code><span data-if="hdevelop" style="display:inline">wiener_filter</span><span data-if="c" style="display:none">wiener_filter</span><span data-if="cpp" style="display:none">WienerFilter</span><span data-if="com" style="display:none">WienerFilter</span><span data-if="dotnet" style="display:none">WienerFilter</span><span data-if="python" style="display:none">wiener_filter</span></code> produces an estimate of the original image
(= image without noise and blurring) by minimizing the mean square error
between estimated and original image.
<code><span data-if="hdevelop" style="display:inline">wiener_filter</span><span data-if="c" style="display:none">wiener_filter</span><span data-if="cpp" style="display:none">WienerFilter</span><span data-if="com" style="display:none">WienerFilter</span><span data-if="dotnet" style="display:none">WienerFilter</span><span data-if="python" style="display:none">wiener_filter</span></code> can be used to restore images corrupted by
noise and/or blurring (e.g., motion blur, atmospheric turbulence or
out-of-focus blur).
Method and realization of this restoration technique bases on the
following model:
The corrupted image is interpreted as the output of a (disturbed) linear
system. Functionality of a linear system is determined by its specific
impulse response. So the convolution of original image and impulse response
results in the corrupted image. The specific impulse response describes
image acquisition and the occurred degradations. In the presence of additive
noise an additional noise term must be considered. So the corrupted image
can be modeled as the result of
<span class="pre">
          [convolution(impulse_response,original_image)] + noise_term
</span>
The noise term encloses two different terms describing image-dependent and
image-independent noise.
According to this model, two terms must be known for restoration by Wiener
filtering:
</p>
<ol>
<li>
<p> degradation-specific impulse response
</p>
</li>
<li>
<p> noise term
</p>
</li>
</ol>
<p>So <code><span data-if="hdevelop" style="display:inline">wiener_filter</span><span data-if="c" style="display:none">wiener_filter</span><span data-if="cpp" style="display:none">WienerFilter</span><span data-if="com" style="display:none">WienerFilter</span><span data-if="dotnet" style="display:none">WienerFilter</span><span data-if="python" style="display:none">wiener_filter</span></code> needs a smoothed version of the input image
to estimate the power spectral density of noise and original image. One
can use one of the smoothing HALCON-filters (e.g., <a href="eliminate_min_max.html"><code><span data-if="hdevelop" style="display:inline">eliminate_min_max</span><span data-if="c" style="display:none">eliminate_min_max</span><span data-if="cpp" style="display:none">EliminateMinMax</span><span data-if="com" style="display:none">EliminateMinMax</span><span data-if="dotnet" style="display:none">EliminateMinMax</span><span data-if="python" style="display:none">eliminate_min_max</span></code></a>)
to get this version.
<code><span data-if="hdevelop" style="display:inline">wiener_filter</span><span data-if="c" style="display:none">wiener_filter</span><span data-if="cpp" style="display:none">WienerFilter</span><span data-if="com" style="display:none">WienerFilter</span><span data-if="dotnet" style="display:none">WienerFilter</span><span data-if="python" style="display:none">wiener_filter</span></code> needs further the impulse response that describes
the specific degradation. This impulse response (represented in spatial
domain) must fit into an image of HALCON image type <code>real</code>. There
exist two HALCON-operators for generation of an impulse response for
motion blur and out-of-focus (see <a href="gen_psf_motion.html"><code><span data-if="hdevelop" style="display:inline">gen_psf_motion</span><span data-if="c" style="display:none">gen_psf_motion</span><span data-if="cpp" style="display:none">GenPsfMotion</span><span data-if="com" style="display:none">GenPsfMotion</span><span data-if="dotnet" style="display:none">GenPsfMotion</span><span data-if="python" style="display:none">gen_psf_motion</span></code></a>,
<a href="gen_psf_defocus.html"><code><span data-if="hdevelop" style="display:inline">gen_psf_defocus</span><span data-if="c" style="display:none">gen_psf_defocus</span><span data-if="cpp" style="display:none">GenPsfDefocus</span><span data-if="com" style="display:none">GenPsfDefocus</span><span data-if="dotnet" style="display:none">GenPsfDefocus</span><span data-if="python" style="display:none">gen_psf_defocus</span></code></a>). The representation of the impulse response
presumes the origin in the upper left corner. This results in the following
disposition of an NxM sized image:
</p>
<ul>
<li>
<p> first rectangle (“upper left”):
(image coordinates xb = 0..(N/2)-1, yb = 0..(M/2)-1) </p>
<p>
- conforms to the fourth quadrant of the Cartesian coordinate system,
encloses values of the impulse response
at position x = 0..N/2 and y = 0..-M/2
</p>
</li>
<li>
<p> second rectangle (“upper right”):
(image coordinates xb = N/2..N-1, yb = 0..(M/2)-1) </p>
<p>
- conforms to the third quadrant of the Cartesian coordinate system,
encloses values of the impulse response
at position x = -N/2..-1 and y = -1..-M/2
</p>
</li>
<li>
<p> third rectangle (“lower left”):
(image coordinates xb = 0..(N/2)-1, yb = M/2..M-1) </p>
<p>
- conforms to the first quadrant of the Cartesian coordinate system,
encloses values of the impulse response
at position x = 1..N/2 and y = M/2..0
</p>
</li>
<li>
<p> fourth rectangle (“lower right”):
(image coordinates xb = N/2..N-1, yb = M/2..M-1) </p>
<p>
- conforms to the second quadrant of the Cartesian coordinate system,
encloses values of the impulse response
at position x = -N/2..-1 and y = M/2..1
</p>
</li>
</ul>
<p><code><span data-if="hdevelop" style="display:inline">wiener_filter</span><span data-if="c" style="display:none">wiener_filter</span><span data-if="cpp" style="display:none">WienerFilter</span><span data-if="com" style="display:none">WienerFilter</span><span data-if="dotnet" style="display:none">WienerFilter</span><span data-if="python" style="display:none">wiener_filter</span></code> works as follows:
</p>
<ul>
<li>
<p>
estimation of the power spectrum density of the original image by using
the smoothed version of the corrupted image,
</p>
</li>
<li>
<p>
estimation of the power spectrum density of each pixel by subtracting
smoothed version from not smoothed version,
</p>
</li>
<li>
<p>
building the Wiener filter kernel with the quotient of power spectrum
densities of noise and original image and with the impulse response,
</p>
</li>
<li>
<p>
processing the convolution of image and Wiener filter frequency response.
</p>
</li>
</ul>
<p>The result image has got image type <code>real</code>.</p>
<h2 id="sec_attention">注意</h2>
<p><a href="#Psf"><i><code><span data-if="hdevelop" style="display:inline">Psf</span><span data-if="c" style="display:none">Psf</span><span data-if="cpp" style="display:none">Psf</span><span data-if="com" style="display:none">Psf</span><span data-if="dotnet" style="display:none">psf</span><span data-if="python" style="display:none">psf</span></code></i></a> must be of image type <code>real</code> and conform to <a href="#Image"><i><code><span data-if="hdevelop" style="display:inline">Image</span><span data-if="c" style="display:none">Image</span><span data-if="cpp" style="display:none">Image</span><span data-if="com" style="display:none">Image</span><span data-if="dotnet" style="display:none">image</span><span data-if="python" style="display:none">image</span></code></i></a>
and <a href="#FilteredImage"><i><code><span data-if="hdevelop" style="display:inline">FilteredImage</span><span data-if="c" style="display:none">FilteredImage</span><span data-if="cpp" style="display:none">FilteredImage</span><span data-if="com" style="display:none">FilteredImage</span><span data-if="dotnet" style="display:none">filteredImage</span><span data-if="python" style="display:none">filtered_image</span></code></i></a> in image width and height.</p>
<h2 id="sec_execution">运行信息</h2>
<ul>
  <li>多线程类型:可重入(与非独占操作符并行运行)。</li>
<li>多线程作用域:全局(可以从任何线程调用)。</li>
  
    <li>在图像通道级别自动并行化。</li>
  
</ul>
<h2 id="sec_parameters">参数表</h2>
  <div class="par">
<div class="parhead">
<span id="Image" class="parname"><b><code><span data-if="hdevelop" style="display:inline">Image</span><span data-if="c" style="display:none">Image</span><span data-if="cpp" style="display:none">Image</span><span data-if="com" style="display:none">Image</span><span data-if="dotnet" style="display:none">image</span><span data-if="python" style="display:none">image</span></code></b> (input_object)  </span><span>(multichannel-)image <code>→</code> <span data-if="hdevelop" style="display:inline">object</span><span data-if="dotnet" style="display:none"><a href="HImage.html">HImage</a></span><span data-if="python" style="display:none">HObject</span><span data-if="cpp" style="display:none"><a href="HImage.html">HImage</a></span><span data-if="c" style="display:none">Hobject</span> (byte / direction / cyclic / int1 / int2 / uint2 / int4 / real)</span>
</div>
<p class="pardesc">Corrupted image.</p>
</div>
  <div class="par">
<div class="parhead">
<span id="Psf" class="parname"><b><code><span data-if="hdevelop" style="display:inline">Psf</span><span data-if="c" style="display:none">Psf</span><span data-if="cpp" style="display:none">Psf</span><span data-if="com" style="display:none">Psf</span><span data-if="dotnet" style="display:none">psf</span><span data-if="python" style="display:none">psf</span></code></b> (input_object)  </span><span>(multichannel-)image <code>→</code> <span data-if="hdevelop" style="display:inline">object</span><span data-if="dotnet" style="display:none"><a href="HImage.html">HImage</a></span><span data-if="python" style="display:none">HObject</span><span data-if="cpp" style="display:none"><a href="HImage.html">HImage</a></span><span data-if="c" style="display:none">Hobject</span> (real)</span>
</div>
<p class="pardesc">impulse response (PSF) of degradation (in spatial domain).</p>
</div>
  <div class="par">
<div class="parhead">
<span id="FilteredImage" class="parname"><b><code><span data-if="hdevelop" style="display:inline">FilteredImage</span><span data-if="c" style="display:none">FilteredImage</span><span data-if="cpp" style="display:none">FilteredImage</span><span data-if="com" style="display:none">FilteredImage</span><span data-if="dotnet" style="display:none">filteredImage</span><span data-if="python" style="display:none">filtered_image</span></code></b> (input_object)  </span><span>(multichannel-)image <code>→</code> <span data-if="hdevelop" style="display:inline">object</span><span data-if="dotnet" style="display:none"><a href="HImage.html">HImage</a></span><span data-if="python" style="display:none">HObject</span><span data-if="cpp" style="display:none"><a href="HImage.html">HImage</a></span><span data-if="c" style="display:none">Hobject</span> (byte / direction / cyclic / int1 / int2 / uint2 / int4 / real)</span>
</div>
<p class="pardesc">Smoothed version of corrupted image.</p>
</div>
  <div class="par">
<div class="parhead">
<span id="RestoredImage" class="parname"><b><code><span data-if="hdevelop" style="display:inline">RestoredImage</span><span data-if="c" style="display:none">RestoredImage</span><span data-if="cpp" style="display:none">RestoredImage</span><span data-if="com" style="display:none">RestoredImage</span><span data-if="dotnet" style="display:none">restoredImage</span><span data-if="python" style="display:none">restored_image</span></code></b> (output_object)  </span><span>image <code>→</code> <span data-if="hdevelop" style="display:inline">object</span><span data-if="dotnet" style="display:none"><a href="HImage.html">HImage</a></span><span data-if="python" style="display:none">HObject</span><span data-if="cpp" style="display:none"><a href="HImage.html">HImage</a></span><span data-if="c" style="display:none">Hobject *</span> (real)</span>
</div>
<p class="pardesc">Restored image.</p>
</div>
<h2 id="sec_example_all">例程 (C)</h2>
<pre class="example">
/* Restoration of a noisy image (size=256x256), that was blurred by motion*/
Hobject object;
Hobject restored;
Hobject psf;
Hobject noisefiltered;
/* 1. Generate a Point-Spread-Function for a motion-blur with       */
/*    parameter a=10 and direction along the x-axis                 */
gen_psf_motion(&amp;psf,256,256,10,0,3);
/* 2. Noisefiltering of the image                                   */
median_image(object,&amp;noisefiltered,"circle",2,0);
/* 3. Wiener-filtering                                              */
wiener_filter(object,psf,noisefiltered,&amp;restored);
</pre>
<h2 id="sec_result">结果</h2>
<p><code><span data-if="hdevelop" style="display:inline">wiener_filter</span><span data-if="c" style="display:none">wiener_filter</span><span data-if="cpp" style="display:none">WienerFilter</span><span data-if="com" style="display:none">WienerFilter</span><span data-if="dotnet" style="display:none">WienerFilter</span><span data-if="python" style="display:none">wiener_filter</span></code> returns <TT>2</TT> (
      <TT>H_MSG_TRUE</TT>)
     if all parameters are
correct.  If the input is empty <code><span data-if="hdevelop" style="display:inline">wiener_filter</span><span data-if="c" style="display:none">wiener_filter</span><span data-if="cpp" style="display:none">WienerFilter</span><span data-if="com" style="display:none">WienerFilter</span><span data-if="dotnet" style="display:none">WienerFilter</span><span data-if="python" style="display:none">wiener_filter</span></code> returns with
an error message.</p>
<h2 id="sec_predecessors">可能的前置算子</h2>
<p>
<code><a href="gen_psf_motion.html"><span data-if="hdevelop" style="display:inline">gen_psf_motion</span><span data-if="c" style="display:none">gen_psf_motion</span><span data-if="cpp" style="display:none">GenPsfMotion</span><span data-if="com" style="display:none">GenPsfMotion</span><span data-if="dotnet" style="display:none">GenPsfMotion</span><span data-if="python" style="display:none">gen_psf_motion</span></a></code>, 
<code><a href="simulate_motion.html"><span data-if="hdevelop" style="display:inline">simulate_motion</span><span data-if="c" style="display:none">simulate_motion</span><span data-if="cpp" style="display:none">SimulateMotion</span><span data-if="com" style="display:none">SimulateMotion</span><span data-if="dotnet" style="display:none">SimulateMotion</span><span data-if="python" style="display:none">simulate_motion</span></a></code>, 
<code><a href="simulate_defocus.html"><span data-if="hdevelop" style="display:inline">simulate_defocus</span><span data-if="c" style="display:none">simulate_defocus</span><span data-if="cpp" style="display:none">SimulateDefocus</span><span data-if="com" style="display:none">SimulateDefocus</span><span data-if="dotnet" style="display:none">SimulateDefocus</span><span data-if="python" style="display:none">simulate_defocus</span></a></code>, 
<code><a href="gen_psf_defocus.html"><span data-if="hdevelop" style="display:inline">gen_psf_defocus</span><span data-if="c" style="display:none">gen_psf_defocus</span><span data-if="cpp" style="display:none">GenPsfDefocus</span><span data-if="com" style="display:none">GenPsfDefocus</span><span data-if="dotnet" style="display:none">GenPsfDefocus</span><span data-if="python" style="display:none">gen_psf_defocus</span></a></code>, 
<code><a href="optimize_fft_speed.html"><span data-if="hdevelop" style="display:inline">optimize_fft_speed</span><span data-if="c" style="display:none">optimize_fft_speed</span><span data-if="cpp" style="display:none">OptimizeFftSpeed</span><span data-if="com" style="display:none">OptimizeFftSpeed</span><span data-if="dotnet" style="display:none">OptimizeFftSpeed</span><span data-if="python" style="display:none">optimize_fft_speed</span></a></code>
</p>
<h2 id="sec_alternatives">可替代算子</h2>
<p>
<code><a href="wiener_filter_ni.html"><span data-if="hdevelop" style="display:inline">wiener_filter_ni</span><span data-if="c" style="display:none">wiener_filter_ni</span><span data-if="cpp" style="display:none">WienerFilterNi</span><span data-if="com" style="display:none">WienerFilterNi</span><span data-if="dotnet" style="display:none">WienerFilterNi</span><span data-if="python" style="display:none">wiener_filter_ni</span></a></code>
</p>
<h2 id="sec_see">参考其它</h2>
<p>
<code><a href="simulate_motion.html"><span data-if="hdevelop" style="display:inline">simulate_motion</span><span data-if="c" style="display:none">simulate_motion</span><span data-if="cpp" style="display:none">SimulateMotion</span><span data-if="com" style="display:none">SimulateMotion</span><span data-if="dotnet" style="display:none">SimulateMotion</span><span data-if="python" style="display:none">simulate_motion</span></a></code>, 
<code><a href="gen_psf_motion.html"><span data-if="hdevelop" style="display:inline">gen_psf_motion</span><span data-if="c" style="display:none">gen_psf_motion</span><span data-if="cpp" style="display:none">GenPsfMotion</span><span data-if="com" style="display:none">GenPsfMotion</span><span data-if="dotnet" style="display:none">GenPsfMotion</span><span data-if="python" style="display:none">gen_psf_motion</span></a></code>, 
<code><a href="simulate_defocus.html"><span data-if="hdevelop" style="display:inline">simulate_defocus</span><span data-if="c" style="display:none">simulate_defocus</span><span data-if="cpp" style="display:none">SimulateDefocus</span><span data-if="com" style="display:none">SimulateDefocus</span><span data-if="dotnet" style="display:none">SimulateDefocus</span><span data-if="python" style="display:none">simulate_defocus</span></a></code>, 
<code><a href="gen_psf_defocus.html"><span data-if="hdevelop" style="display:inline">gen_psf_defocus</span><span data-if="c" style="display:none">gen_psf_defocus</span><span data-if="cpp" style="display:none">GenPsfDefocus</span><span data-if="com" style="display:none">GenPsfDefocus</span><span data-if="dotnet" style="display:none">GenPsfDefocus</span><span data-if="python" style="display:none">gen_psf_defocus</span></a></code>
</p>
<h2 id="sec_references">References</h2>
<p>

M. Lückenhaus:“Grundlagen des Wiener-Filters und seine Anwendung
in der Bildanalyse”; Diplomarbeit;
Technische Universität München, Institut für Informatik;
Lehrstuhl Prof. Radig; 1995
<br>
Azriel Rosenfeld, Avinash C. Kak: Digital Picture Processing,
Computer Science and Aplied Mathematics, Academic Press New York/San
Francisco/London 1982
</p>
<h2 id="sec_module">模块</h2>
<p>
Foundation</p>
<!--OP_REF_FOOTER_START-->
<hr>
<div class="indexlink">
<a href="index_classes.html"><span data-if="dotnet" style="display:none;">类别</span><span data-if="cpp" style="display:none;">类别</span></a><span data-if="dotnet" style="display:none;"> | </span><span data-if="cpp" style="display:none;"> | </span><a href="index_by_name.html">算子列表</a>
</div>
<div class="footer">
<div class="copyright">HALCON算子参考手册 Copyright © 2015-2023 51Halcon</div>
</div>
</div>
</body>
</html>
